home *** CD-ROM | disk | FTP | other *** search
- type
- arglist_string = string[80];
- const
- arglist_max = 20;
- arglist_number : integer = -1;
- var
- argvlist : array[1..arglist_max] of ^arglist_string;
- i : integer;
-
-
-
-
- function argv(num : integer) : arglist_string;
-
- var
- argument : arglist_string absolute cseg:$80;
- newparm,parmline : arglist_string;
- i,j : integer;
- state : (leading_ws, non_quote, quoted, end_quote);
- inchar : char;
-
- procedure saveparm;
- begin
- if arglist_number < arglist_max then begin
- arglist_number := arglist_number+1;
- new(argvlist[arglist_number]);
- argvlist[arglist_number]^ := newparm;
- newparm := '';
- end;
- end;
-
- begin
- if arglist_number = -1 then begin
- arglist_number := 0;
- parmline := argument+' ';
- state := leading_ws;
- newparm := '';
- for i := 1 to length(parmline) do begin
- inchar := parmline[i];
- case state of
-
- leading_ws: begin
- if inchar = '''' then state := quoted
- else if inchar <> ' ' then begin
- newparm := newparm+inchar;
- state := non_quote;
- end;
- end;
-
- non_quote: begin
- if inchar = ' ' then begin
- saveparm;
- state := leading_ws;
- end
- else newparm := newparm+inchar;
- end;
-
- quoted: begin
- if inchar = '''' then state := end_quote
- else newparm := newparm+inchar;
- end;
-
- end_quote: begin
- if inchar = '''' then begin
- newparm := newparm+inchar;
- state := quoted;
- end
- else if inchar <> ' ' then begin
- newparm := newparm+inchar;
- state := non_quote;
- end
- else begin
- saveparm;
- state := leading_ws;
- end;
- end;
- end;
- end;
- end;
- if (num > 0) and (num <= arglist_number) then
- argv := argvlist[num]^
- else argv := '';
- end;
-
- function argc : integer;
- var
- dummy : arglist_string;
-
- begin
- if arglist_number = -1 then dummy := argv(1); {force evaluation}
- argc := arglist_number;
- end;
-